﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;

namespace Ocean.His.MedicalInsurance
{
    /// <summary>
    /// 4205
    /// 自费病人门诊就医信息上传
    /// </summary>
    [DataContract]
    public class SI4205MdtrtInfo
    {
        /// <summary>
        /// 医药机构就诊ID
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：Y
        /// 机构生成内唯一就诊流水
        /// </summary>
        [DataMember(Name = "fixmedins_mdtrt_id")]
        public string FixmedinsMdtrtId { get; set; }

        /// <summary>
        /// 定点医药机构编号
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "fixmedins_code")]
        public string FixmedinsCode { get; set; }

        /// <summary>
        /// 定点医药机构名称
        /// 参数类型：字符型
        /// 参数长度：200
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "fixmedins_name")]
        public string FixmedinsName { get; set; }

        /// <summary>
        /// 人员证件类型
        /// 参数类型：字符型
        /// 参数长度：6
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "psn_cert_type")]
        public string PsnCertType { get; set; }

        /// <summary>
        /// 证件号码
        /// 参数类型：字符型
        /// 参数长度：600
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "certno")]
        public string Certno { get; set; }

        /// <summary>
        /// 人员姓名
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "psn_name")]
        public string PsnName { get; set; }

        /// <summary>
        /// 性别
        /// 参数类型：字符型
        /// 参数长度：6
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "gend")]
        public string Gend { get; set; }

        /// <summary>
        /// 民族
        /// 参数类型：字符型
        /// 参数长度：3
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "naty")]
        public string Naty { get; set; }

        /// <summary>
        /// 出生日期
        /// 参数类型：日期型
        /// 参数长度：
        /// 代码标识：
        /// 是否必填：
        /// yyyy-MM-dd
        /// </summary>
        [DataMember(Name = "brdy")]
        public string Brdy { get; set; }

        /// <summary>
        /// 年龄
        /// 参数类型：数值型
        /// 参数长度：4,1
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "age")]
        public decimal Age { get; set; }

        /// <summary>
        /// 联系人姓名
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "coner_name")]
        public string ConerName { get; set; }

        /// <summary>
        /// 联系电话
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "tel")]
        public string Tel { get; set; }

        /// <summary>
        /// 联系地址
        /// 参数类型：字符型
        /// 参数长度：500
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "addr")]
        public string Addr { get; set; }

        /// <summary>
        /// 开始时间
        /// 参数类型：日期型
        /// 参数长度：
        /// 代码标识：
        /// 是否必填：Y
        /// yyyy-MM-dd
        /// </summary>
        [DataMember(Name = "begntime")]
        public string Begntime { get; set; }

        /// <summary>
        /// 结束时间
        /// 参数类型：日期型
        /// 参数长度：
        /// 代码标识：
        /// 是否必填：
        /// yyyy-MM-dd
        /// </summary>
        [DataMember(Name = "endtime")]
        public string Endtime { get; set; }

        /// <summary>
        /// 医疗类别
        /// 参数类型：字符型
        /// 参数长度：6
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "med_type")]
        public string MedType { get; set; }

        /// <summary>
        /// 主要病情描述
        /// 参数类型：字符型
        /// 参数长度：1000
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "main_cond_dscr")]
        public string MainCondDscr { get; set; }

        /// <summary>
        /// 病种编码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 按照标准编码填写：按病种结算病种目录代码(bydise_setl_list_code)、门诊慢特病病种目录代码(opsp_dise_cod)、
        /// </summary>
        [DataMember(Name = "dise_codg")]
        public string DiseCodg { get; set; }

        /// <summary>
        /// 病种名称
        /// 参数类型：字符型
        /// 参数长度：500
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "dise_name")]
        public string DiseName { get; set; }

        /// <summary>
        /// 计划生育手术类别
        /// 参数类型：字符型
        /// 参数长度：6
        /// 代码标识：Y
        /// 是否必填：
        /// 生育门诊按需录入
        /// </summary>
        [DataMember(Name = "birctrl_type")]
        public string BirctrlType { get; set; }

        /// <summary>
        /// 计划生育手术或生育日期
        /// 参数类型：日期型
        /// 参数长度：
        /// 代码标识：
        /// 是否必填：
        /// 生育门诊按需录入
        /// </summary>
        [DataMember(Name = "birctrl_matn_date")]
        public string BirctrlMatnDate { get; set; }

        /// <summary>
        /// 生育类别
        /// 参数类型：字符型
        /// 参数长度：6
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "matn_type")]
        public string MatnType { get; set; }

        /// <summary>
        /// 孕周数
        /// 参数类型：数值型
        /// 参数长度：2
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "geso_val")]
        public decimal GesoVal { get; set; }

        /// <summary>
        /// 电子票据代码
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "elec_bill_code")]
        public string ElecBillCode { get; set; }

        /// <summary>
        /// 电子票据号码
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：
        /// 如果是纸质发票则填写纸质发票号码
        /// </summary>
        [DataMember(Name = "elec_billno_code")]
        public string ElecBillnoCode { get; set; }

        /// <summary>
        /// 电子票据校验码
        /// 参数类型：字符型
        /// 参数长度：6
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "elec_bill_chkcode")]
        public string ElecBillChkcode { get; set; }

        /// <summary>
        /// 字段扩展
        /// 参数类型：字符型
        /// 参数长度：4000
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "exp_content")]
        public string ExpContent { get; set; }

    }

    /// <summary>
    /// 自费病人门诊诊断信息
    /// </summary>
    [DataContract]
    public class SI4205DiseInfo
    {

        /// <summary>
        /// 诊断类别
        /// 参数类型：字符型
        /// 参数长度：3
        /// 代码标识：Y
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "diag_type")]
        public string DiagType { get; set; }

        /// <summary>
        /// 诊断排序号
        /// 参数类型：数值型
        /// 参数长度：2
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "diag_srt_no")]
        public decimal DiagSrtNo { get; set; }

        /// <summary>
        /// 诊断代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "diag_code")]
        public string DiagCode { get; set; }

        /// <summary>
        /// 诊断名称
        /// 参数类型：字符型
        /// 参数长度：100
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "diag_name")]
        public string DiagName { get; set; }

        /// <summary>
        /// 诊断科室
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "diag_dept")]
        public string DiagDept { get; set; }

        /// <summary>
        /// 诊断医生编码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "diag_dr_code")]
        public string DiagDrCode { get; set; }

        /// <summary>
        /// 诊断医生姓名
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "diag_dr_name")]
        public string DiagDrName { get; set; }

        /// <summary>
        /// 诊断时间
        /// 参数类型：日期时间型
        /// 参数长度：
        /// 代码标识：
        /// 是否必填：Y
        /// yyyy-MM-dd
        /// </summary>
        [DataMember(Name = "diag_time")]
        public string DiagTime { get; set; }

        /// <summary>
        /// 有效标志
        /// 参数类型：字符型
        /// 参数长度：3
        /// 代码标识：Y
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "vali_flag")]
        public string ValiFlag { get; set; }

    }

    /// <summary>
    /// 自费病人门诊费用明细信息
    /// </summary>
    [DataContract]
    public class SI4205FeeDetail
    {

        /// <summary>
        /// 医药机构就诊ID
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：Y
        /// 必须与就诊信息中fixmedins_mdtrt_id对应
        /// </summary>
        [DataMember(Name = "fixmedins_mdtrt_id")]
        public string FixmedinsMdtrtId { get; set; }

        /// <summary>
        /// 医疗类别
        /// 参数类型：字符型
        /// 参数长度：6
        /// 代码标识：Y
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "med_type")]
        public string MedType { get; set; }

        /// <summary>
        /// 记账流水号
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：Y
        /// 单次就诊内唯一
        /// </summary>
        [DataMember(Name = "bkkp_sn")]
        public string BkkpSn { get; set; }

        /// <summary>
        /// 费用发生时间
        /// 参数类型：日期时间型
        /// 参数长度：
        /// 代码标识：
        /// 是否必填：Y
        /// yyyy-MM-dd
        /// </summary>
        [DataMember(Name = "fee_ocur_time")]
        public string FeeOcurTime { get; set; }

        /// <summary>
        /// 定点医药机构编号
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "fixmedins_code")]
        public string FixmedinsCode { get; set; }

        /// <summary>
        /// 定点医药机构名称
        /// 参数类型：字符型
        /// 参数长度：200
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "fixmedins_name")]
        public string FixmedinsName { get; set; }

        /// <summary>
        /// 数量
        /// 参数类型：数值型
        /// 参数长度：16,4
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "cnt")]
        public decimal Cnt { get; set; }

        /// <summary>
        /// 单价
        /// 参数类型：数值型
        /// 参数长度：16,6
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "pric")]
        public decimal Pric { get; set; }

        /// <summary>
        /// 明细项目费用总额
        /// 参数类型：数值型
        /// 参数长度：16,2
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "det_item_fee_sumamt")]
        public decimal DetItemFeeSumamt { get; set; }

        /// <summary>
        /// 医疗目录编码
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "med_list_codg")]
        public string MedListCodg { get; set; }

        /// <summary>
        /// 医药机构目录编码
        /// 参数类型：字符型
        /// 参数长度：150
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "medins_list_codg")]
        public string MedinsListCodg { get; set; }

        /// <summary>
        /// 医药机构目录名称
        /// 参数类型：字符型
        /// 参数长度：100
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "medins_list_name")]
        public string MedinsListName { get; set; }

        /// <summary>
        /// 医疗收费项目类别
        /// 参数类型：字符型
        /// 参数长度：6
        /// 代码标识：Y
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "med_chrgitm_type")]
        public string MedChrgitmType { get; set; }

        /// <summary>
        /// 商品名
        /// 参数类型：字符型
        /// 参数长度：200
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "prodname")]
        public string Prodname { get; set; }

        /// <summary>
        /// 开单科室编码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "bilg_dept_codg")]
        public string BilgDeptCodg { get; set; }

        /// <summary>
        /// 开单科室名称
        /// 参数类型：字符型
        /// 参数长度：100
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "bilg_dept_name")]
        public string BilgDeptName { get; set; }

        /// <summary>
        /// 开单医生编码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "bilg_dr_code")]
        public string BilgDrCode { get; set; }

        /// <summary>
        /// 开单医师姓名
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "bilg_dr_name")]
        public string BilgDrName { get; set; }

        /// <summary>
        /// 受单科室编码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "acord_dept_codg")]
        public string AcordDeptCodg { get; set; }

        /// <summary>
        /// 受单科室名称
        /// 参数类型：字符型
        /// 参数长度：100
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "acord_dept_name")]
        public string AcordDeptName { get; set; }

        /// <summary>
        /// 受单医生编码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "acord_dr_code")]
        public string AcordDrCode { get; set; }

        /// <summary>
        /// 受单医生姓名
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "acord_dr_name")]
        public string AcordDrName { get; set; }

        /// <summary>
        /// 中药使用方式
        /// 参数类型：字符型
        /// 参数长度：6
        /// 代码标识：Y
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "tcmdrug_used_way")]
        public string TcmdrugUsedWay { get; set; }

        /// <summary>
        /// 外检标志
        /// 参数类型：字符型
        /// 参数长度：3
        /// 代码标识：Y
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "etip_flag")]
        public string EtipFlag { get; set; }

        /// <summary>
        /// 外检医院编码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "etip_hosp_code")]
        public string EtipHospCode { get; set; }

        /// <summary>
        /// 出院带药标志
        /// 参数类型：字符型
        /// 参数长度：3
        /// 代码标识：Y
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "dscg_tkdrug_flag")]
        public string DscgTkdrugFlag { get; set; }

        /// <summary>
        /// 
        /// 参数类型：单次剂量描述
        /// 参数长度：字符型
        /// 代码标识：200
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "sin_dos_dscr")]
        public string SinDosDscr { get; set; }

        /// <summary>
        /// 
        /// 参数类型：使用频次描述
        /// 参数长度：字符型
        /// 代码标识：200
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "used_frqu_dscr")]
        public string UsedFrquDscr { get; set; }

        /// <summary>
        /// 周期天数
        /// 参数类型：数值型
        /// 参数长度：4,2
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "prd_days")]
        public decimal PrdDays { get; set; }

        /// <summary>
        /// 
        /// 参数类型：用药途径描述
        /// 参数长度：字符型
        /// 代码标识：200
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "medc_way_dscr")]
        public string MedcWayDscr { get; set; }

        /// <summary>
        /// 备注
        /// 参数类型：字符型
        /// 参数长度：500
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "memo")]
        public string Memo { get; set; }

        /// <summary>
        /// 全自费金额
        /// 参数类型：数值型
        /// 参数长度：16,2
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "fulamt_ownpay_amt")]
        public decimal FulamtOwnpayAmt { get; set; }

        /// <summary>
        /// 超限价金额
        /// 参数类型：数值型
        /// 参数长度：16,2
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "overlmt_selfpay")]
        public decimal OverlmtSelfpay { get; set; }

        /// <summary>
        /// 先行自付金额
        /// 参数类型：数值型
        /// 参数长度：16,2
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "preselfpay_amt")]
        public decimal PreselfpayAmt { get; set; }

        /// <summary>
        /// 符合政策范围金额
        /// 参数类型：数值型
        /// 参数长度：16,2
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "inscp_amt")]
        public decimal InscpAmt { get; set; }

        /// <summary>
        /// 处方号
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 外购处方时，传入外购处方的处方号；非外购处方，传入医药机构处方号
        /// </summary>
        [DataMember(Name = "rxno")]
        public string Rxno { get; set; }

    }

    /// <summary>
    /// 
    /// </summary>
    [DataContract]
    public class SI4205InputModel
    {
        [DataMember(Name = "mdtrtinfo")]
        public SI4205MdtrtInfo si4205MdtrtInfo { get; set; }

        [DataMember(Name = "diseinfo")]
        public SI4205DiseInfo si4205DiseInfo { get; set; }

        [DataMember(Name = "feedetail")]
        public SI4205FeeDetail si4205FeeDetail { get; set; }
    }

    /// <summary>
    /// 4205
    /// 自费病人门诊就医信息上传
    /// </summary>
    [DataContract]
    public class SI4205RequestModel : SIBaseRequestModel
    {
        /// <summary>
        /// 交易输入
        /// </summary>
        [DataMember(Name = "input")]
        public SI4205InputModel Input { get; set; }

        public SI4205RequestModel(MedicalInsuranceOption config) : base(config)
        {
            Infno = "4205";
        }
    }
}
